import {
	orderCreate,
	orderCancel,
	consumerAdvance,
	orderRemove,
	payState,
} from "@/api/consumerOrder.js";

const useOrder = () => {
	// 去付款
	const handlePay = (data) => {
		console.log('handlePay 方法已触发，请求参数：', data); // 新增：先确认方法被调用
		return new Promise((resolve, reject) => {
			consumerAdvance({
					orderId: data.id,
					payMethod: "WEI_XIN_PAY",
					remark: data?.remark || "",
					couponId: data.couponId || "",
					serverCount: data.serverCount || []
				})
				.then((res) => {
					console.log('res--------', res); // 目标日志：接口有响应时打印
					if (res.code == 200) {
						const payData = res.data; // 变量名改payData，避免与外层data冲突（可选但推荐）
						wx.requestPayment({
							timeStamp: payData.timeStamp,
							nonceStr: payData.nonceStr,
							package: payData.package,
							signType: payData.signType,
							paySign: payData.paySign,
							success: (successRes) => {
								console.log("微信支付成功：", successRes);
								resolve(successRes);
							},
							fail: (err) => {
								console.log("微信支付失败：", err);
								reject(err);
							},
						});
					} else {
						// 新增：接口返回非200状态（如业务错误），也打印日志
						console.log('接口返回非200状态：', res);
						reject(new Error(`接口错误：${res.msg || '未知错误'}`));
					}
				})
				// 新增：捕获接口请求本身的错误（网络、404、500等）
				.catch((apiErr) => {
					console.error('consumerAdvance接口请求失败：', apiErr);

					reject(apiErr); // 将错误传递给调用方（toPay方法）
				});
		});
	};

	// 取消订单
	const handleCancel = (data) => {
		uni.showLoading({
			title: "加载中...",
			mask: true,
		});
		const params = {
			orderId: data.id,
		};
		return new Promise((resolve, reject) => {
			orderCancel(params)
				.then((response) => {
					console.log(response, "response");
					if (response?.code === 200) {
						uni.showToast({
							title: "取消成功",
							icon: "success",
						});
						resolve();
					}
				})
				.catch((err) => {
					uni.showToast({
						title: "取消失败",
						icon: "error",
					});
					reject();
				})
				.finally((res) => {
					// uni.hideLoading();
					console.log(res, "res");
				});
		});
	};

	// 申请退款
	const handleRefund = (data) => {
		uni.navigateTo({
			url: "/pages/order/consumerOrder/refundRequest?id=" + data.id,
		});
	};

	// 申请售后 - 跳转至订单会话页面与客服沟通换人、退款、投诉等事宜
	const handleAfterSale = (data) => {
		console.log(data);
		// uni.navigateTo({
		//   url: "/pages/order/consumerOrder/refundRequest?id=" + data.id
		// });
		uni.navigateTo({
			url: "/pages/chat/detail/index?peerId=" +
				"对方ID" +
				"&userId=" +
				"当前ID" +
				"&actionType=order" +
				"&peerName=" +
				"对方昵称",
		});
	};

	// 去评价 - 进入评价页面
	const handleEvaluate = (data) => {
		console.log(data, "data");
		// 对图片URL进行编码，确保特殊字符不会破坏URL结构
		const encodedImg = encodeURIComponent(data.itemImg||data.img);
		uni.navigateTo({
			url: `/pages/order/consumerOrder/evaluate?id=${data.id||data.orderId}&itemName=${data.itemName||data.name}&itemImg=${encodedImg}`
		});
	};

	// 再买一单 - 按照当前订单内容直接生成新的订单
	// useOrder.js 中 handlePayBill 方法修改（核心优化部分）
	const handlePayBill = (data) => {
		uni.showLoading({
			title: "加载中...",
			mask: true,
		});

		// 1. 严格处理 priceIds：确保最终格式为数组（空数组或有效元素数组）
		let priceIdsArr = []; // 初始化为空数组，避免非数组格式
		if (data?.priceIds) { // 仅当 data.priceIds 存在且非空时处理
			// 若为数组：直接使用（过滤空值，避免 [null, undefined] 情况）
			if (Array.isArray(data.priceIds)) {
				priceIdsArr = data.priceIds.filter(id => id != null && id !== "");
			}
			// 若为单个值（字符串/数字）：转为数组（过滤空字符串/NaN）
			else if (data.priceIds != null && data.priceIds !== "") {
				priceIdsArr = [data.priceIds];
			}
			// 若为 null/undefined/空字符串：保持空数组
		}

		// 2. 构造请求参数：键名严格为 priceIds，值为处理后的数组
		const params = {
			priceIds: priceIdsArr // 最终格式：priceIds: [] 或 priceIds: [123, 456]
		};

		// 3. （可选）打印参数日志，便于调试（生产环境可删除）
		console.log("handlePayBill 请求参数：", params);
		console.log("priceIds 类型：", Array.isArray(params.priceIds) ? "数组" : "非数组");

		return new Promise((resolve, reject) => {
			orderCreate(params)
				.then((response) => {
					console.log("orderCreate 响应：", response);
					if (response?.code === 200) {
						uni.showToast({
							title: "成功",
							icon: "success"
						});
						resolve(response.data); // 传递响应数据，便于调用处使用
					} else {
						// 处理后端非200状态（如参数错误），避免静默失败
						uni.showToast({
							title: response?.msg || "创建订单失败",
							icon: "none"
						});
						reject(new Error(response?.msg || "非成功响应"));
					}
				})
				.catch((err) => {
					// 捕获网络错误或后端异常，提示具体信息
					const errMsg = err?.response?.data?.msg || err?.msg || "请求失败";
					uni.showToast({
						title: errMsg,
						icon: "none"
					});
					reject(err);
				})
				.finally(() => {
					uni.hideLoading(); // 确保加载框必隐藏
				});
		});
	};

	// 更多
	// 0 - 申请开票进入开票申请页面； 1 - 删除订单，逻辑删除订单且不可恢复。客户侧删除后运营端依然可以看到；
	const handlePower = (data, type) => {
		if (!type) {
			uni.navigateTo({
				url: "/pages/order/consumerOrder/invoicing?id=" +
					data.id +
					"&paymentAmount=" +
					data.paymentAmount +
					"&status=finish",
			});
		} else {
			uni.showLoading({
				title: "删除中...",
				mask: true,
			});
			return new Promise((resolve, reject) => {
				orderRemove(data.id)
					.then((response) => {
						console.log(response, "response");
						if (response?.code === 200) {
							uni.showToast({
								title: "删除成功",
								icon: "success",
							});
							resolve();
						}
					})
					.catch((err) => {
						uni.showToast({
							title: err?.msg || "删除失败",
							icon: "none",
						});
					})
					.finally((res) => {
						uni.hideLoading();
						console.log(res, "res");
					});
			});
		}
	};

	return {
		handlePay,
		handleCancel,
		handleRefund,
		handlePayBill,
		handleAfterSale,
		handleEvaluate,
		handlePower,
	};
};

export default useOrder;